package com.sky.context;

/**
 * 上下文工具类
 * 在当前线程中存储和获取共享数据，实现线程内的数据传递
 */
public class BaseContext {
    //线程局部变量：存储当前线程的用户id
    //ThreadLocal确保每个线程拥有独立的变量副本，线程之间数据隔离
    private static ThreadLocal<Long> currentId = new ThreadLocal<>();
    //线程局部变量：存储当前线程的订单id
    private static ThreadLocal<Long> currentOrderId = new ThreadLocal<>();

    /**
     * 向当前线程存储用户id
     * @param id
     */
    public static void setCurrentId(Long id) {
        currentId.set(id);
    }

    /**
     * 从当前线程获取用户id
     * @return
     */
    public static Long getCurrentId() {
        return currentId.get();
    }

    /**
     * 向当前线程存储订单id
     * @param orderId
     */
    public static void setCurrentOrderId(Long orderId) {
        currentOrderId.set(orderId);
    }

    /**
     * 从当前线程获取订单id
     * @return
     */
    public static Long getCurrentOrderId() {
        return currentOrderId.get();
    }

    /**
     * 清楚当前线程存储的用户id
     * 防止线程复用导致的数据残留
     */
    public static void removeCurrentId() {
        currentId.remove();
    }

    /**
     * 清除当前线程存储的订单id
     */
    public static void removeCurrentOrderId() {
        currentOrderId.remove();
    }
}